Thank you for your feedback, Daniel.
I have some updates, and found the root cause: if the field value contains special characters, the CSWP will not render the double quotation marks around the field value.
View the page html source, and then find the text "QueryModification", you will see what happen:
Query Text Input: Title<>{Page.Title}
1. While the page title is "Test Page 1" (without special character), the rendered query text is
Title<>\"Test Page 1\". It works as expected.
2. While the page title is "Test-Page-1" (with special character "-", of cause we have more special characters on production), the rendered query text is
Title<>Test-Page-1. The double quotation marks are not rendered by the CSWP, so the query text are broken. It does not work as expected.
If I make the query text as Title<>"{Page.Title}"
1. While the page title is "Test Page 1", the rendered query text is
Title<>\"\"Test Page 1\"\". It does NOT work since the
quotes are duplicated (no sure why CSWP duplicates the quota mark),
2. While the page title is "Test-Page-1", the rendered query text is
Title<>\"Test-Page-1\". Quotes are correct, but it does NOT work as expected still.
The expected rendered query text (view from the html source) should be
Title<>\"Test\\\-Page\\\-1\". (Here is test url: <a href="http://server/_api/search/query?querytext='Title<>"Test%5c%5c%5c-Page%5c%5c%5c-1"'&rowlimit=10">http://server/_api/search/query?querytext='Title<>"Test%5c%5c%5c-Page%5c%5c%5c-1"'&rowlimit=10)
From the above information, I can say the CSWP not handle the special character correctly ("\" is not inserted before any special charactor).
Is there any setting in CSWP can be used to resolve above problem?